# _*_ coding: utf-8 _*_
"""
@ 时间    ：2024/10/26 17:45
@ 作者    ：旺财
@ 文件    ：02 电影智能推荐系统.py
@ 说明    ：   
"""
import pandas as pd

# 1.数据读取
movies = pd.read_excel('电影.xlsx')
score = pd.read_excel('评分.xlsx')
# print(movies.head())
# print(score.head())
# print()

df = pd.merge(movies, score, on='电影编号')
print(df.head())
print()

# 2.数据分析
ratings = pd.DataFrame(df.groupby('名称')['评分'].mean())
ratings['评分次数'] = df.groupby('名称')['评分'].count()
print(ratings.sort_values(by='评分次数', ascending=False).head())
print()

# 3.数据处理
user_movie = df.pivot_table(index='用户编号', columns='名称', values='评分')
print(user_movie.describe())

# 4.搭建系统
# 以阿甘正传为例,分析用户假设看了阿甘正传应该给他推荐什么电影
# 从数据透视表中提取用户对阿甘正传的评分
fg = user_movie['阿甘正传（1994）']
print(pd.DataFrame(fg).head())

# 计算其他电影与阿甘正传间的皮尔逊相关系数
corr_fg = user_movie.corrwith(fg)
similarity = pd.DataFrame(corr_fg, columns=['相关系数'])
similarity.dropna(inplace=True)
print(similarity.head())

# 将评分次数并入相关系数表
similarity_new = pd.merge(similarity, ratings['评分次数'], left_index=True, right_index=True)

# 5.推荐结果
print(similarity_new[similarity_new['评分次数'] > 20].sort_values(by='相关系数', ascending=False).head())